﻿/*
SINACOR - BMF&Bovespa
Arquivo: BloqueioCliente.cs
Criado em: 14-mai-2010 17:57:04
Arquiteto Responsável: p-dmartinelli
*/
using System;
using System.Collections.Generic;
using System.Text;
using Sinacor.Infra.Common.Validation;
using Sinacor.Infra.Common.Exceptions;
using Sinacor.Infra.Service.ExceptionHandling;
using Sinacor.Infra.Service.Validation;
using Sinacor.Infra.Service.Validation.BusinessRules;
using Sinacor.Servico.Bovespa.Alocacao.BusinessEntity;


namespace Sinacor.Servico.Bovespa.Alocacao.BusinessLogic.BusinessRuleValidation
{
    public class BloqueioCliente : BaseBusinessRuleValidation<NegocioAlocadoDireto>, IBusinessRuleValidation
    {
        #region Atributos
        private int _clienteInvalido = 520001;
        private int _clienteBloqueado = 520002;
        private int _erroObjetoNulo = 314816;
        #endregion
        #region Propriedades
        public int ClienteInvalido
        {
            get { return _clienteInvalido; }
            set { _clienteInvalido = value; }
        }

        public int ClienteBloqueado
        {
            get { return _clienteBloqueado; }
            set { _clienteBloqueado = value; }
        }

        public int ErroObjetoNulo
        {
            get { return _erroObjetoNulo; }
            set { _erroObjetoNulo = value; }
        }
        #endregion
        #region Métodos
        public List<ValidationError> GetErrors()
        {
            return base.ErrorsList;
        }

        public void Validate()
        {
            if (base.EntityToValidate != null)
            {
                if (EntityToValidate.DadosAlocacao.Cliente.HasValue)
                {
                    Cliente.BusinessEntity.BloqueioCliente request = new Cliente.BusinessEntity.BloqueioCliente();
                    request.Mercado = (Cliente.BusinessEntity.Enum.TipoMercado)EntityToValidate.Negocio.Mercado;
                    request.CodigoCliente = EntityToValidate.DadosAlocacao.Cliente;
                    request.NaturezaOperacao = (Cliente.BusinessEntity.Enum.TipoNaturezaOperacao)EntityToValidate.Negocio.NaturezaOperacao;
                    request.CodigoNegocio = EntityToValidate.Negocio.Codigo;
                    request.DataPregao = EntityToValidate.Negocio.DataPregao;

                    Cliente.BusinessLogic.Cliente retorno = new Sinacor.Servico.Bovespa.Cliente.BusinessLogic.Cliente();
                    Cliente.BusinessEntity.BloqueioCliente response = retorno.VerificarBloqueioCliente(request);
                    if (response.isBloqueado)
                        base.AddValidationError(ClienteBloqueado);
                }
                else
                    base.AddValidationError(ClienteInvalido);
            }
            else
                base.AddValidationError(ErroObjetoNulo);


        }
        #endregion
    }

}